from dataclasses import dataclass, field

#GRPO 训练的脚本参数，特别是与奖励函数相关的参数。
@dataclass
class GRPOScriptArguments:
    reward_funcs: list[str] = field(
        default_factory=lambda: ["accuracy","format"],
        metadata={
            "help":"奖励行数列表。可选值：'accuracy','format','reasoning_steps','cosine','repetition_penalty'"
        },
    )
    cosine_min_value_wrong: float = field(
        default= -0.5,
        metadata={"help":"余弦缩放奖励函数中，错误答案的最小奖励值"},
    )
    cosine_max_value_wrong: float = field(
        default=-0.1,
        metadata={"help":"余弦缩放奖励函数中，错误答案的最大奖励值"},
    )
    cosine_min_value_correct: float = field(
        default=0.8,
        metadata={"help":"余弦缩放奖励函数中，正确答案的最小奖励值"},
    )
    cosine_max_value_correct: float = field(
        default=1.0,
        metadata={"help":"余弦缩放奖励函数中，正确答案的最大奖励值"},
    )
    cosine_max_len: int = field(
        default=1000,
        metadata={"help": "余弦缩放奖励函数的最大长度阈值"},
    )
    repetition_n_grams: int = field(
        default=3,
        metadata={"help": "重复惩罚奖励函数中，n-gram 的大小"},
    )
    repetition_max_penalty: float = field(
        default=-0.1,
        metadata={"help": "重复惩罚奖励函数中，最大惩罚值 (负值)"},
    )

